package com.abc.example.service;

import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import com.github.pagehelper.PageInfo;
import com.abc.example.entity.Orgnization;


/**
 * @className	: OrgnizationManService
 * @description	: 组织机构对象管理服务接口类
 * @summary		: 
 * @history		: 
 * ------------------------------------------------------------------------------
 * date			version		modifier		remarks
 * ------------------------------------------------------------------------------
 * 2024/01/14	1.0.0		sheng.zheng		初版
 *
 */
public interface OrgnizationManService {
	/**
	 * @methodName		: addItem
	 * @description		: 新增一个组织机构对象
	 * @param request	: request对象
	 * @param item		: 组织机构对象，参数字段如下：
	 * 	{
	 * 		"orgCode"		: "",	// 组织机构编号，可选
	 * 		"orgName"		: "",	// 组织机构名称，必选
	 * 		"orgFullname"	: "",	// 组织机构全称，可选
	 * 		"orgType"		: 0,	// 机构类型，必选
	 * 		"orgCategory"	: 0,	// 组织机构分类，可选
	 * 		"leader"		: "",	// 负责人名称，可选
	 * 		"contacts"		: "",	// 联系人，必选
	 * 		"phoneNumber"	: "",	// 联系电话，必选
	 * 		"email"			: "",	// Email，可选
	 * 		"address"		: "",	// 地址，可选
	 * 		"zipcode"		: "",	// 邮编，可选
	 * 		"district"		: "",	// 行政区，必选
	 * 		"districtLevel"	: 5,	// 行政级别，可选
	 * 		"parentId"		: 0,	// 父组织ID，必选
	 * 		"lon"			: 0.0,	// 经度，可选
	 * 		"lat"			: 0.0,	// 纬度，可选
	 * 		"remark"		: "",	// 备注，可选
	 * 	}
	 * @return			: 新增的组织机构对象key
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public Map<String,Object> addItem(HttpServletRequest request, Orgnization item);

	/**
	 * @methodName		: addItems
	 * @description		: 批量新增组织机构对象
	 *	要求下列属性值相同 : parentId
	 * @param request	: request对象
	 * @param itemList	: 组织机构对象列表, @see {@link OrgnizationManService#addItem}
	 * @return			: 批量记录的第一条记录ID
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public Map<String,Object> addItems(HttpServletRequest request, List<Orgnization> itemList); 

	/**
	 * @methodName		: editItem
	 * @description		: 根据key修改一个组织机构对象
	 * @param request	: request对象
	 * @param params	: 请求参数，形式如下：
	 * 	{
	 * 		"orgId"			: 0,	// 组织ID，必选
	 * 		"orgCode"		: "",	// 组织机构编号，可选
	 * 		"orgName"		: "",	// 组织机构名称，可选
	 * 		"orgFullname"	: "",	// 组织机构全称，可选
	 * 		"orgType"		: 0,	// 机构类型，可选
	 * 		"orgCategory"	: 0,	// 组织机构分类，可选
	 * 		"leader"		: "",	// 负责人名称，可选
	 * 		"contacts"		: "",	// 联系人，可选
	 * 		"phoneNumber"	: "",	// 联系电话，可选
	 * 		"email"			: "",	// Email，可选
	 * 		"address"		: "",	// 地址，可选
	 * 		"zipcode"		: "",	// 邮编，可选
	 * 		"district"		: "",	// 行政区，可选
	 * 		"districtLevel"	: 5,	// 行政级别，可选
	 * 		"parentId"		: 0,	// 父组织ID，可选
	 * 		"lon"			: 0.0,	// 经度，可选
	 * 		"lat"			: 0.0,	// 纬度，可选
	 * 		"remark"		: "",	// 备注，可选
     * 	}
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public void editItem(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: updateItems
	 * @description		: 根据条件批量修改组织机构对象
	 * @param request	: request对象
	 * @param params	: 请求参数，至少需要一个修改字段和一个条件字段，形式如下：
	 * 	{
	 * 					  修改字段集如下：
	 * 		"zipcode"		: "",	// 邮编，可选
	 * 		"district"		: "",	// 行政区，可选
	 * 		"districtLevel"	: 5,	// 行政级别，可选
	 * 		"remark"		: "",	// 备注，可选
	 * 					  条件字段如下：
	 * 		"parentId"	: 0,	// 父组织ID，可选
	 * 		"orgIdList"	: [],	// 组织ID列表，list，可选
	 * 	}
	 * @history			:
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public void updateItems(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: deleteItem
	 * @description		: 根据key禁用/启用一个组织机构对象
	 * @param request	: request对象
	 * @param params	: 组织机构对象的key字段集
	 * 	{
	 * 		"orgId"		: 0,// 组织ID，必选
	 * 		"deleteFlag": 1,// 记录删除标记，0-正常，1-删除，默认为1，可选
	 * 	}
	 * @history			:
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public void deleteItem(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: deleteItems
	 * @description		: 根据条件批量删除组织机构对象
	 * @param request	: request对象
	 * @param params	: 请求参数，形式如下：
	 * 	{
	 * 		"orgIdList"	: [],	// 组织ID列表，list，可选
	 * 		"parentId"	: 0,	// 父组织ID，可选
	 * 	}
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public void deleteItems(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: queryItems
	 * @description		: 根据条件分页查询组织机构对象列表
	 * @param request	: request对象
	 * @param params	: 查询参数，形式如下：
	 * 	{
	 * 		"orgId"				: 0,	// 组织ID，可选
	 * 		"orgIdList"			: [],	// 组织ID列表，list，可选
	 * 		"orgName"			: "",	// 组织机构名称，可选
	 * 		"orgNameLike"		: "",	// 组织机构名称，like，可选
	 * 		"orgFullname"		: "",	// 组织机构全称，可选
	 * 		"orgFullnameLike"	: "",	// 组织机构全称，like，可选
	 * 		"orgType"			: 0,	// 机构类型，1-本公司，2-客户公司，其它待扩展，可选
	 * 		"orgTypeList"		: [],	// 机构类型列表，list，可选
	 * 		"leader"			: "",	// 负责人名称，可选
	 * 		"leaderLike"		: "",	// 负责人名称，like，可选
	 * 		"contacts"			: "",	// 联系人，可选
	 * 		"contactsLike"		: "",	// 联系人，like，可选
	 * 		"phoneNumber"		: "",	// 联系电话，可选
	 * 		"phoneNumberLike"	: "",	// 联系电话，like，可选
	 * 		"email"				: "",	// Email，可选
	 * 		"emailLike"			: "",	// Email，like，可选
	 * 		"addressLike"		: "",	// 地址，like，可选
	 * 		"zipcode"			: "",	// 邮编，可选
	 * 		"district"			: "",	// 行政区，省、市、区县名称，可选
	 * 		"districtLike"		: "",	// 行政区，省、市、区县名称，like，可选
	 * 		"districtLevel"		: 5,	// 行政级别，1-国家级、2-副国级、3-省部级、4、副省级、5-市级、6、副市级、7-区县、8-副县级、9-街道乡镇级，可选
	 * 		"districtLevelList"	: [],	// 行政级别列表，list，可选
	 * 		"parentId"			: 0,	// 父组织ID，可选
	 * 		"remarkLike"		: "",	// 备注，like，可选
	 * 		"deleteFlag"		: 0,	// 记录删除标记，0-正常、1-已删除，可选
	 * 		"parentOrgName"		: "",	// 父组织机构名称，可选
	 * 		"parentOrgNameLike"	: "",	// 父组织机构名称，like，可选
	 * 		"sortList"			: [],	// 排序选项，SortField对象列表，只支持数据表字段属性，可选
	 * 		"pagenum"			: 1,	// 当前页码，可选
	 * 		"pagesize"			: 10,	// 每页记录数，可选
	 * 	}
	 * @return			: 组织机构对象分页列表
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public PageInfo<Orgnization> queryItems(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: getItem
	 * @description		: 根据key获取一个组织机构对象
	 * @param request	: request对象
	 * @param params	: 请求参数，形式如下：
	 * 	{
	 * 		"orgId"	: 0,// 组织ID，必选
	 * 	}
	 * @return			: 组织机构对象
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public Orgnization getItem(HttpServletRequest request, Map<String, Object> params);

	/**
	 * @methodName		: getItems
	 * @description		: 根据条件查询组织机构对象列表
	 * @param request	: request对象
	 * @param params	: 查询参数，形式如下：
	 * 	{
	 * 		"offset"			: 0,	// limit记录偏移量，可选
	 * 		"rows"				: 20,	// limit最大记录条数，可选
	 * 		"sortList"			: [],	// 排序选项，SortField对象列表，只支持数据表字段属性，可选
	 * 		"orgId"				: 0,	// 组织ID，可选
	 * 		"orgIdList"			: [],	// 组织ID列表，list，可选
	 * 		"orgName"			: "",	// 组织机构名称，可选
	 * 		"orgNameLike"		: "",	// 组织机构名称，like，可选
	 * 		"orgFullname"		: "",	// 组织机构全称，可选
	 * 		"orgFullnameLike"	: "",	// 组织机构全称，like，可选
	 * 		"orgType"			: 0,	// 机构类型，1-本公司，2-客户公司，其它待扩展，可选
	 * 		"orgTypeList"		: [],	// 机构类型列表，list，可选
	 * 		"leader"			: "",	// 负责人名称，可选
	 * 		"leaderLike"		: "",	// 负责人名称，like，可选
	 * 		"contacts"			: "",	// 联系人，可选
	 * 		"contactsLike"		: "",	// 联系人，like，可选
	 * 		"phoneNumber"		: "",	// 联系电话，可选
	 * 		"phoneNumberLike"	: "",	// 联系电话，like，可选
	 * 		"email"				: "",	// Email，可选
	 * 		"emailLike"			: "",	// Email，like，可选
	 * 		"addressLike"		: "",	// 地址，like，可选
	 * 		"zipcode"			: "",	// 邮编，可选
	 * 		"district"			: "",	// 行政区，省、市、区县名称，可选
	 * 		"districtLike"		: "",	// 行政区，省、市、区县名称，like，可选
	 * 		"districtLevel"		: 5,	// 行政级别，1-国家级、2-副国级、3-省部级、4、副省级、5-市级、6、副市级、7-区县、8-副县级、9-街道乡镇级，可选
	 * 		"districtLevelList"	: [],	// 行政级别列表，list，可选
	 * 		"parentId"			: 0,	// 父组织ID，可选
	 * 		"remarkLike"		: "",	// 备注，like，可选
	 * 		"deleteFlag"		: 0,	// 记录删除标记，0-正常、1-已删除，可选
	 * 		"parentOrgName"		: "",	// 父组织机构名称，可选
	 * 		"parentOrgNameLike"	: "",	// 父组织机构名称，like，可选
	 * 	}
	 * @return			: 组织机构对象列表
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public List<Orgnization> getItems(HttpServletRequest request, Map<String, Object> params);
	
	/**
	 * 
	 * @methodName		: insertItems
	 * @description	    : 批量插入组织机构对象记录，用于内部调用，调用处应保证数据的有效性
	 * @param itemList	: 组织机构对象列表
	 * @history		    : 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks                   
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public void insertItems(List<Orgnization> itemList);

	/**
	 * 
	 * @methodName		: flushItem
	 * @description	    : 对象存在则修改，否则新增，用于内部调用
	 * @param request	: request对象
	 * @param item		: 组织机构对象，无key信息
	 * @param editFields: 可修改的字段名列表
	 * @history		    : 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks                   
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public void flushItem(HttpServletRequest request,Orgnization item,List<String> editFields); 

	/**
	 * 
	 * @methodName		: importExcelFile
	 * @description		: 导入组织机构对象数据Excel文件
	 * @param request	: request对象
	 * @param upfile	: 上传文件对象
	 * @param params	: 请求参数，形式如下：
	 * 	{
	 * 		"parentId"	: 0,// 父组织ID，必选
	 * 	}
	 * @return			: 导入异常提示信息列表
	 * @history			:
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public List<String> importExcelFile(HttpServletRequest request,
			MultipartFile upfile, Map<String, Object> params);
			

	/**
	 * 
	 * @methodName		: exportExcelFile
	 * @description	    : 根据查询条件导出组织机构对象数据Excel文件
	 * @param request	: request对象
	 * @param response	: response对象
	 * @param params	: @see {@link OrgnizationManService#queryItems}
     * @history		:
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks                   
	 * ------------------------------------------------------------------------------
	 * 2024/01/14	1.0.0		sheng.zheng		初版
	 *
	 */
	public void exportExcelFile(HttpServletRequest request,HttpServletResponse response,
			Map<String,Object> params);

}